cmake_minimum_required(VERSION 3.5) # CMake 最低版本要求，参见 https://cmake.org/download/
project(QTBluePrint LANGUAGES CXX)

# 让 CMake 在处理自动生成的 moc/uic/rcc 文件时更方便地找到当前目录中的头文件
# （这是一个全局开关，现代做法仍推荐对每个 target 使用 target_include_directories）
set(CMAKE_INCLUDE_CURRENT_DIR ON)

# 启用 Qt 的自动处理：自动运行 uic/moc/rcc
set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)

# C++ 标准设置（这里保留为 C++11，按需可升级）
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

# 如果你不通过 CMAKE_PREFIX_PATH 或环境变量提供 Qt 路径，可以在外部定义 QT_DIR。
# 直接硬编码路径不是最佳实践；建议在命令行或环境中传入 -DQT_DIR=...
if(NOT DEFINED QT_DIR)
    set(QT_DIR "D:/TOOL/QT/5.15.2/mingw81_64")
endif()

# 若 Qt 安装目录未被 CMake 自动发现，可以把 QT_DIR 添加到 CMAKE_PREFIX_PATH：
list(APPEND CMAKE_PREFIX_PATH ${QT_DIR})

# 查找 Qt5 Widgets（会使用 CMAKE_PREFIX_PATH / Qt5_DIR 等途径定位）
find_package(Qt5 COMPONENTS Widgets REQUIRED)

# MSVC：确保源文件按 UTF-8 编译（只对 MSVC 生效）
add_compile_options("$<$<C_COMPILER_ID:MSVC>:/utf-8>")
add_compile_options("$<$<CXX_COMPILER_ID:MSVC>:/utf-8>")

# 收集源文件。注意：file(GLOB...) 只是收集文件名，不会自动对 CMakeLists 做语义上的“包含”。
# 加上 CONFIGURE_DEPENDS 可以在新增文件时触发重新配置（需要较新 CMake）。
file(GLOB_RECURSE SOURCES
    CONFIGURE_DEPENDS
    "${CMAKE_CURRENT_SOURCE_DIR}/src/*.cpp"
    "${CMAKE_CURRENT_SOURCE_DIR}/src/*.c"
    "${CMAKE_CURRENT_SOURCE_DIR}/src/*.h"    # 可选：把头文件也加入 SOURCES，便于 IDE 显示
)
# include_directories 这个指令是旧版本的做法，新版本推荐使用 target_include_directories。
# target_include_directories 有 PRIVATE、PUBLIC 和 INTERFACE 三种作用域。控制性更强。
add_executable(${PROJECT_NAME}
    # WIN32               # 指定 Windows GUI 子系统（去掉这一行可以保留控制台窗口，便于调试）
    ${SOURCES}
)

# 明确告诉该 target 在编译时搜索哪些目录（推荐做法）。
# PRIVATE：只有该目标自身需要这些 include 路径（不会传递给链接它的下游 target）。
# 如果这个库要被其他 target 使用并且需要这些头，应使用 PUBLIC 或 INTERFACE。
target_include_directories(${PROJECT_NAME} PRIVATE
    ${CMAKE_CURRENT_SOURCE_DIR}/src
    ${CMAKE_CURRENT_SOURCE_DIR}/src/controllers
)

# 链接 Qt5 Widgets（使用已找到的导出目标）
target_link_libraries(${PROJECT_NAME} PRIVATE Qt5::Widgets)
